Skip to content

v0.80.0: the docs tree, the neutral Waymark split, and the cairn theme

Choose a tag to compare

@glw907 glw907 released this 05 Jul 10:31

The window since 0.79.0 — one coherent arc: the documentation tree rebuilt end to end, the pre-beta editor improvements, the Waymark template neutralized with the identity extracted as the cairn theme, the responsive hardening, and the naming settled.

Waymark starter components (showcase/template only; no consumer action)

  • The starter template gains six content components, each a worked defineComponent with a
    schema-driven picker form: icon (renders only names from the adapter's declared icon set,
    loud failure on an unknown name), video (a zero-request static facade that links out;
    in-page embedding would need iframe through the sanitize floor and is deliberately not
    done), pull-quote, cta, and faq (native details, markdown-capable answer slot).
  • The converter island demo is retired. Its replacement exemplar is an expiring-announcement
    banner: frontmatter-date-driven, hides itself after expiry (checked at both build and
    hydration), renders nothing on an invalid date.
  • Not shipped, recorded: figure needs no component (the engine owns :::figure natively;
    the name is reserved), and gallery waits on the component-attribute image gap filed in
    ROADMAP.

Changelog

All notable changes to this project are recorded here, most recent first.

Unreleased

Showcase (Waymark template; no consumer action)

  • The starter template's default theme is neutral. The display face is Figtree, a humanist
    sans matching the body's Source Sans 3, in place of the display serif Fraunces; the paper
    ladder drops its warm hue tint for a clean near-white/near-black progression; and the
    display type steps (h3 through h1) sit one step back on the scale. The three signature
    prose gestures, the cairn-glyph hr, the diamond ul bullet, and the margin-hanging
    pull-quote, move behind an opt-in .prose[data-flourish] hook in prose.css, kept in place
    for the planned cairn theme layer to re-enable with one attribute.
  • A design-review craft pass on the neutral template: the header and footer inner content now
    caps at the same reading measure as the article and home body, so the chrome's left edge
    lines up with the body copy instead of centering independently at a wider band; the uppercase
    eyebrow label is dosed down to where it differentiates two sections on the same page (the
    home's new "Latest"/"Archive" split) rather than repeating on every masthead; the home gives
    its newest entry a lead treatment above a tightened archive index; and the styleguide now
    demonstrates the full component kit (icon, cta, video, faq, and the real pull-quote
    directive in place of a hand-styled paragraph), a lone FAQ renders in its own bordered
    container, an empty callout points list no longer leaves a phantom gap, markdown nested in a
    callout/alert/FAQ slot scales down instead of rendering at full display size, and the two
    demo code samples are reworded to fit the column instead of clipping mid-word.
  • A viewport-extremes audit at 320px and 2560px: a markdown table used to satisfy its own
    width: 100% by wrapping words inside a cell, breaking an inline code token like
    [text](address) across lines at a narrow width. Every other hunted surface (the video
    facade, the CTA button, FAQ, the banner island, image figures, code blocks, and the
    tag-filter chips) held up at both extremes with no change needed.
  • That audit is now a permanent gate: site-visual.spec.ts adds light-theme pixel baselines for
    the home page and the reading-surface article at 320px and 2560px, plus one mid-width (1920px)
    baseline on the article that pins the fluid root-scale clamp's active interpolation slope, not
    just its floor and cap.
  • A follow-up a11y review of that audit's own fix found it fixed the 320px squeeze but broke
    WCAG 1.3.1: putting display: block; overflow-x: auto directly on the <table> strips its
    row/cell roles from the accessibility tree in every current engine. Every rendered table now
    sits inside a .table-scroll wrapper instead, a small rehype step in the showcase's own render
    pipeline (table-scroll.ts, composed onto renderMarkdown's output in cairn.config.ts); the
    wrapper carries role="region", a tabindex and an aria-label naming the table, and the
    scroll, while the table itself keeps display: table. The same review flagged the footer nav
    for WCAG 2.5.8: it now carries the same flex-wrap and 44px-class tap targets the header nav
    already had. The pixel baselines above are regenerated for both changes.

Editor

  • Pasting rich text from Word, Google Docs, or a web page now converts headings, emphasis,
    links, and lists to markdown instead of dropping all formatting; plain-text and image
    paste are unchanged.
  • Component blocks open folded when an entry loads; the touch-to-unfold safety invariant is
    unchanged.
  • The editor footer shows a live count of open check issues beside the word count (visible
    counterpart of the screen-reader announcer).
  • The in-editor cheat-sheet lists undo and redo.
  • Editor-facing vocabulary: the create dialog, rename dialog, and media forms say "Address"
    (formerly "Slug"), and the admin sidebar's media item says "Library".

Fixed

  • examples/showcase/svelte.config.js now sets csrf: { checkOrigin: false }, matching the
    deploy guide's instruction (cairn's guard owns admin CSRF).
  • The media.upload_failed log event's documented-but-never-populated code field is
    reconciled with the emitters.

Documentation

  • The documentation tree rewritten end to end against the approved information
    architecture: new front doors, the editor arm, 25 guides, a consolidated explanation arm,
    reference restructures, and a rewritten ten-milestone tutorial with typechecked snippets.
    No consumer action required.
  • New doc gates: check:snippets typechecks every fenced code block against the built
    package; the suspended reference, signature, and link gates are re-enabled; a monthly
    cloud drift routine samples published pages against the code
    (docs/internal/docs-maintenance.md records the system).

Editor experience

  • The create dialog, the Change URL control, and the media library's asset metadata form now
    label an entry or asset's URL field "Address" rather than "Slug", matching the vocabulary the
    docs already used. The matching validation errors (an invalid value, a collision, a no-op
    rename) read "address" instead of "slug" too. The stored field name and every internal
    identifier stay slug; only the editor-facing copy changed.
  • Pasting rich text from Word, Google Docs, or a web page now converts its formatting to
    markdown instead of dropping it: headings, bold and italic emphasis (including Google Docs'
    style-attribute runs), links, and bulleted or numbered lists all arrive as the matching
    marks. Anything else (a table, an image, code, a blockquote, strikethrough) degrades to its
    plain text. Plain-text paste and image paste are unchanged. New dependencies: rehype-parse
    and rehype-remark, both official unified.js packages already alongside rehype-sanitize
    and remark-rehype.

No consumer action required: the window contains no breaking changes.