Skip to content

Delivered test ownership

This disposition implements ticket 376 under spec 367. Generated projects own all their scripts, tests and YAML after bootstrap. No regeneration is required.

Retain, move and remove

Existing delivered testsDecisionBehavior and maintenance rationale
src/config/site.test.ts, deployment.test.tsRetainValidate configuration, URL trust boundaries, environment overrides and CMS branding derived from current site configuration.
src/config/content-models/registry.test.ts, src/content.config.test.tsRetainProtect the shared content model and Astro collection contract rather than example article values. Adapt with intentional model changes.
src/integrations/sveltia/{config,preview-collections,previews}.test.tsRetainProtect CMS authentication/configuration, model-derived fields and configured preview registration. Move exact article/tags shape and preview classes into Forge fixtures.
src/lib/{articles,paths,navigation}.test.tsRetainProtect draft exclusion, ordering, pagination boundaries, deployment paths and link classification with synthetic content.
src/themes/site-theme.test.tsRetainDerive expectations from configured flavors; no fixed Latte/Mocha obligation. Remove with the Catppuccin implementation if replacing the theme system.
scripts/documentation-examples.test.tsRetainChecks that the local documentation matches the shipped CMS/configuration contract.
scripts/validate-build.test.tsRetain/adaptRequire infrastructure outputs and reject unresolved bootstrap tokens. Optional About and example article paths are no longer required. The replacement-route case guards this boundary.
scripts/run-lighthouse.test.tsRetain/adaptProtect root/nested preview URL mapping. Audit the homepage, one discovered content listing and one nested detail route, without a fixed starter slug; preserve performance, SEO and size budgets as well as all-page browser accessibility.
tests/accessibility.spec.tsRetain/adaptDiscover built public HTML pages; protect serious/critical axe violations in light/dark modes, main/heading landmarks and small-screen overflow after content or route edits.
tests/accessibility.spec.ts starter interaction assertionsMoveForge fixtures retain named navigation, skip-link keyboard behavior, mobile menu and reduced-motion CTA coverage against the unmodified starter. Consumers can use these as patterns for their replacement components.
tests/navigation.spec.tsMoveForge fixtures retain starter navigation, named routes/headings and article pagination. These assertions do not ship.
tests/theme.spec.tsMoveForge fixtures retain fixed Catppuccin colors/flavors, local font loading and starter focus styling. Axe remains shipped; replacement widgets still need their own keyboard/focus tests.
tests/routes.spec.tsRetain/adaptCheck metadata against site configuration, CMS noindex, internal link resolution, feed/crawler/manifest availability and HTTP 404 status. Discover pages from output rather than pinning article slugs.
tests/routes.spec.ts starter valuesMoveForge fixtures retain attribution, tags, example feed/draft values and named 404 recovery. Remove duplicated exact-text expectations from consumers.
tests/smoke/deployment.spec.tsRetain/adaptVerify the real deployed page/assets, heading and mobile overflow. Remove fixed generator attribution because README explicitly permits its removal.

The baseline proposed moving article and theme unit suites. Inspection showed their fixtures are synthetic and their color/default expectations derive from current configuration; retaining those functional contracts protects draft handling and supported theme selection without fixing starter names, routes or colors. Exact article/tag/preview/documentation values are split into Forge fixtures as proposed.

Integration evidence and adaptation boundary

The existing packed-generator end-to-end harness runs the isolated default project’s public test, build, validate:build and Chromium test:e2e commands. Only that default fixture receives Forge’s starter browser regression files from packages/create-forge/fixtures/starter-tests/; those files are outside the published package. Starter unit fixtures under packages/create-forge/fixtures/starter-unit/ are also copied into the default project only, protecting the example registry/tags, preview classes and documentation snippet. The harness then removes both fixture sets, renames About to Studio, changes a published article title/slug, and selects another dark flavor. The same consumer commands must pass, and the built edited article/new route must exist while the old About output is absent. This covers actual emitted source and registry-pinned dependencies, without overlaying local package candidates.

The existing Forge CMS frontmatter preservation/integration checks remain responsible for serialization and editing-to-build regressions; this change does not replace or duplicate them. CMS unit contracts and configuration remain delivered. No CMS security or preservation assertion is removed. A browser suite does not establish live GitHub/GitLab execution or branch protection.

Ordinary content/design edits should not require updating example names, slugs or palette values in delivered browser/build checks. Changes to capabilities still need deliberate adaptation: removing RSS, moving the CMS, changing content models, replacing theme implementation or replacing SEO metadata changes the relevant contracts. Keep accessibility/security checks and add behavioral keyboard tests for your own interactive controls. Lighthouse budgets and navigation remain plain consumer-owned configuration; audit added routes and adjust budgets only for intended product needs.