# Hard-fail checklist // static output artifact

A static output artifact fails [design-system-ASK](../../README.md) inheritance if any of the following are present. Treat each as a hard fail, not a stylistic preference.

## Styling fails

- Generic memo, academic-paper, beige/off-white paper, or serif-document styling
- Body copy in a serif typeface
- Default browser tables dominating layout
- The artifact reads as a static Word document or legal-memo PDF

## Theme inheritance fails

- A theme is hard-coded on `<html>` or `<body>` (e.g. `data-theme="dark"`) without explicit reason
- The artifact does not honor `prefers-color-scheme` (the upstream `colors_and_type.css` resolves it; the artifact must not override)
- A JavaScript theme toggle is present without explicit reason

## Color discipline fails

- Any color outside the closed palette appears. The core set: the gradient stops (`#E2D3F0` / `#D4C6E1` light; `#201D26` / `#0A090C` dark), white (`#FFFFFF`, the wordmark pairing — not body text), and the default light-mode foreground `#6A637F` (the approved dark purple); `#201D26` doubles as the **opt-in high-contrast foreground** (not the default here — do not apply by font size, and never a rebind of the gradient-surface foreground ramp; registered uses only — see the next item). Plus surface (`#BFB3D4` / `#C9BCDE`) + two UI accents (`#8B79A2`, `#AE87C2`) + three emphasis accents (`#FF00FF`, `#AA40FF`, `#00BEFF`). An artifact that adopts the opt-in semantic-state modules, `spectral-state.css`, `evidence-state.css` and `review-semantics.css`, loaded by name, may show their role values only where those modules present their roles, each with its visible label: a state or evidence role on its element, or a Review Semantics mark. Its Tier 3 overlay and all other chrome stay in the core set
- `--fg-high-contrast` is applied outside the registered-use list in [design-system-ASK](../../README.md), under **High-contrast foreground — registered uses** — the role is opt-in and gated: measured need, explicit ASK authorization, registration there
- A semantic green / red / yellow status system appears, other than the sanctioned semantic-state primitive and its profiles (Spectral State, Evidence State, Review State), loaded by name and shown in those roles' own presentations with their visible labels
- Invented hex values appear in the artifact's overlay CSS
- A local `--fg-*` / `--line-*` rebind appears (foreground must be inherited from the foundation ramp, not re-declared at the artifact layer). The **only** sanctioned token override is the Class B line-intensity overlay (`--artifact-line` / `--artifact-line-soft`): white at higher alpha in light mode, foundation lines in dark — white is in-palette and the override is scoped to structural lines, not foreground.

## Self-contained / sealed-output fails

- The delivered artifact is **not self-contained**: it requires the network, a sibling stylesheet, or a sidecar font to render with full styling
- An external `<link>` / `@import` / live raw-URL stylesheet reference survives into the delivered artifact (the editable template links the local mirror; the *delivered* artifact must be sealed)
- A relative font URL that resolves outside the artifact survives into the delivered artifact (fonts must be embedded at seal time)
- An unreplaced template marker (`[placeholder]`, `0000000`, etc.) appears in the delivered artifact
- A single-file artifact does not inline the document-register modules verbatim after the foundation, in the template's order — `surface-panel.css`, `surface-text-link.css`, `surface-document.css`, `surface-treatments.css` — or a multi-file package does not link them once from its bundle, in that order; or an artifact that adopts Review Semantics does not follow them with `spectral-state.css`, `evidence-state.css` and `review-semantics.css`, in that order

## Type discipline fails

- Inter is used for code or tabular data
- JetBrains Mono is used for prose body
- Text the document register governs is set outside its roles: a title, heading, paragraph, list item, label, metadata value, code span, quotation, preformatted block or dense table value styled by an element rule or a local type declaration instead of its role, or a heading set smaller than the prose it governs
- The register's rendered check (`node tools/check-role-conformance.mjs --url <artifact>`, run from a design-system-ASK checkout at the commit the artifact's `MANIFEST.md` records) reports a finding on the delivered artifact, reports it vacuous, or lists any text as `unmapped`
- Weights outside the register's assignment appear. Inter: 200 for body, lede and quotation text; 300 for subsection and entry titles; 400 for document and section titles and the Caption role; 500 only for the deep heading (`h4` and deeper) and for strong emphasis. JetBrains Mono: 300, and 500 only for strong emphasis inside a mono role
- 600 SemiBold or heavier weights appear

## Source-truth fails

- The artifact does not record a design-system-ASK source SHA
- A `MANIFEST.md` (or equivalent provenance record) is missing
- Live CSS is hot-linked from the upstream repo's raw URL or any live path (static artifacts must freeze inheritance at render time)
- The artifact cannot be audited against a known upstream commit

## Tier boundary fails

- Visible design-system-ASK Tier 3 instance identity — the "ASK Design System" branding or the `logo-ASK` wordmark — is propagated into the consuming project's artifact unless the consuming project is itself an ASK-instance surface and has explicitly accepted that overlay, or, for the `logo-ASK` wordmark alone, ASK has explicitly assigned that wordmark to the consuming project as its locally supplied Tier 3 and the artifact falls within the assignment's recorded scope. An assignment does not make that project ASK-the-entity.
- The consuming project's own Tier 3 identity is fused with the upstream Tier 2 design language rather than layered cleanly on top
