Skip to content

Releases: AccentCMS/accent

Accent CMS v0.23.1

Choose a tag to compare

@zoosky zoosky released this 26 Jul 14:14
Immutable release. Only release title and notes can be modified.

A bugfix release for the v0.23 static-build and deployment surface. The
unifying theme is serve/build parity: several links and assets that worked
under accent serve were missing from accent build output and 404ed only
on deployed sites, invisibly to accent validate.

Added

  • accent build --strict-links: a build-output link sweep resolves every
    emitted internal href against the output tree (at any base_path,
    including none). It warns by default and fails the build under the flag;
    the docs and website deploy workflows now build with it, so a broken-link
    regression fails the deploy instead of shipping 404s.

Fixed

  • Default theme under site.base_path: the top menu and the docs sidebar
    (both its versioned and non-versioned branches) rendered empty on every
    sub-path deployment, because the templates encoded root-relative URL
    shape in their depth heuristics and the version.root template context
    value never carried the base path. Nav depth is now measured against
    url('/') and version.root is prefixed like every other context URL;
    a regression fixture builds the embedded docs theme with and without a
    base path.
  • Static-build link parity for three link classes that worked in serve
    and 404ed on deployed sites: versionless URLs now get a meta-refresh stub
    at every default-version page (previously only the versioning root);
    internal relative links are absolutized at render time against both
    authoring bases, so emitted hrefs no longer depend on the host's
    trailing-slash behavior; and accent validate now flags all unresolvable
    relative links, not just .md-suffixed ones (page-local file references
    stay exempt). One long-broken source-tree-path link in the docs was
    corrected across buckets, with frozen-bucket errata.
  • Page-local media in static builds: accent build now emits page-local
    media files at their bare page URLs, mirroring the serve-time alias
    exactly -- rendered pages win collisions, per-page media.expose: false
    is honoured, sectioning directories and root-level orphan files are
    covered, and media.serve_at_page_url: false disables both surfaces
    consistently. The static-asset resolver now also rejects dot-prefixed
    path components on both surfaces, and serve and build share a single
    extension allowlist.
  • Copy-code button: copying a code block no longer prepends the button's
    own label (Copy/Copied!) to the copied text.
  • install.sh now warns when a stale accent earlier in PATH shadows the
    freshly installed binary, naming both paths and the remediation.
  • Release/deploy pipeline, no released-binary impact: the site deploy
    workflows no longer race the release binary after a tag, and the release
    publish job survives partial re-runs of the build matrix.

Verifying your download

curl -fsSLO https://raw.githubusercontent.com/AccentCMS/accent/main/release-signing-key.asc
gpg --import release-signing-key.asc
gpg --verify checksums-v0.23.1.txt.asc checksums-v0.23.1.txt
sha256sum -c --ignore-missing checksums-v0.23.1.txt

Accent CMS v0.23.0

Choose a tag to compare

@zoosky zoosky released this 25 Jul 15:17
Immutable release. Only release title and notes can be modified.

Sub-path deployment support lands: a static build (or a proxied accent serve) now works correctly when the site lives under a path prefix
such as a GitHub Pages project site or a reverse-proxy mount point.
Alongside it, the two-release-old docs promotion checklist becomes a
tool with a fail-closed release gate behind it, and the workspace picks
up a Rust toolchain bump plus the CI/dependency fixes that came with
validating it.

Added

  • Base path support for sub-path deployments (f255): site.base_path
    config field plus --base-path on accent build and
    accent serve-static. Every internal URL (page links, theme assets,
    media, search fetch paths and result URLs, llms.txt links, .md
    redirect stubs, pagination, tag links) is emitted under the prefix, so a
    static build works when served from a sub-path such as a GitHub Pages
    project site. The prefix auto-derives from the path component of
    site.url/--base-url, making the documented
    accent build --base-url https://user.github.io/repo recipe work as
    written; an explicit base_path wins, and if it diverges from the
    URL's own path a startup/build warning names both values and the
    affected absolute-URL surfaces (sitemap, feeds, canonicals, JSON-LD).
    Absolute artifacts compose the prefix exactly once. New url(path)
    template function/filter for themes; in-tree themes no longer hardcode
    root-absolute paths, and accent build warns about hardcoded
    root-absolute URLs in theme templates and fails the build if any
    emitted file still contains an unprefixed internal URL. accent serve
    and accent serve-static serve the site under the prefix -- reserved
    infrastructure routes, now including /_health and /.well-known,
    stay at the server root -- so local serving reproduces the deployed URL
    space. Post-review hardening: DocFind's native search index (the JSON
    API/MCP consumers) is built from its own root-relative document set
    instead of reusing prefixed browser-index bytes, so startup search
    under a base path returns results again; the version-scoped-search
    (f225) "/" catch-all is preserved instead of being joined into the
    prefix; and font_css_url() now joins the prefix like cdn_url(),
    with proxied font CSS emitting relative ../files/ references so
    cached stylesheets stay correct under any mount prefix.
  • Docs promotion tool and fail-closed release gate (f254): cargo run -p docs-promote -- promote --release X.Y executes the versioned-docs
    release promotion (freeze the vX.Y-dev bucket to vX.Y, relabel both
    bucket roots, seed vX.(Y+1)-dev, regenerate the frozen-content
    manifest) as a single idempotent, non-committing tool instead of a
    manual checklist -- closing both the omission failure class (b101:
    v0.22.0 shipped without the docs ever being promoted) and the
    incompleteness failure class (b108: the stale "0.22-dev" breadcrumb).
    scripts/check-docs-promotion.sh backs it with an independent gate
    wired into both scripts/release.sh and release.yml: a stable-tag
    release now fails closed if the docs corpus was never promoted,
    matching the existing LICENSE_PUBLIC_KEY_PEM fail-closed precedent
    (pre-release tags are exempt). Repo-internal tooling with no render
    surface or product-facing behavior. This release's own docs were
    promoted with it: v0.23 is now the frozen release bucket and
    v0.24-dev the writable one.

Fixed

  • Frontmatter redirects no longer poison browser redirect caches
    (b107)
    : a simple redirect: /target (and the detailed form without
    an explicit code:) now emits 302 Found with Cache-Control: no-cache instead of a permanent 301. An author-editable "moving
    pointer" redirect cached as permanent by the browser was surviving
    server restarts and content changes, producing convincing
    "the docs are broken" reports on shared dev ports. code: 301 remains
    the explicit opt-in for deliberate permanent migrations;
    canonicalization redirects (trailing slash, .md cleanup,
    permalink-pattern maps) are unaffected and stay 301.
  • Version-bucket breadcrumb showed the wrong version after promotion
    (b108)
    : a released version bucket's menu.title frontmatter kept
    reading "X.Y-dev" after promotion, so the breadcrumb and prev/next
    navigation disagreed with the version switcher. Fixed for the shipped
    v0.22 docs and closed permanently going forward by the docs-promote
    tool's relabel step (f254).
  • Mermaid diagram layout: the vendored accent-mmdr renderer
    advanced through three patch releases (0.3.0 -> 0.3.2), fixing edges
    that crossed through subgraph titles, edges into adjacent terminal
    markers (flowchart ((Done)) circles, state [*] end rings) that
    routed as clipped hooks or squeezed diagonal staircases, and terminal
    markers that overlapped their source node.
  • Fresh dependency resolution could fail the build: lightningcss
    bumped to 1.0.0-alpha.72 -- the previous pin's loose
    parcel_selectors requirement let any build that re-resolves
    dependencies instead of honoring Cargo.lock (cargo install without
    --locked, a build after cargo update) pick an incompatible
    parcel_selectors/cssparser pair and fail to compile inside
    lightningcss. Locked and fresh resolutions now agree.
  • Toolchain and CI hardening, no released-binary impact: the
    workspace toolchain moved to Rust 1.97.1 (rust-toolchain.toml), which
    also made an unattributed clippy --lib --tests false positive on the
    lib test target stop reproducing (b110); every test-side git fixture
    helper now disables commit signing, so the integration-test suite no
    longer fails on a developer machine with a locked signing agent (b111);
    and the Windows CI runner's persistent target directory now self-cleans
    below 40 GB free, fixing a disk-exhaustion failure that the
    toolchain/dependency bump triggered (b112).

Verifying your download

curl -fsSLO https://raw.githubusercontent.com/AccentCMS/accent/main/release-signing-key.asc
gpg --import release-signing-key.asc
gpg --verify checksums-v0.23.0.txt.asc checksums-v0.23.0.txt
sha256sum -c --ignore-missing checksums-v0.23.0.txt

Accent CMS v0.22.1

Choose a tag to compare

@zoosky zoosky released this 14 Jul 07:27

A bugfix release. It completes the trial-license code removal that 0.22.0
announced at the policy level, corrects how an expired legacy trial key is
reported at startup, and folds in two developer-profile fixes that no
released binary was ever affected by.

Removed

  • accent license trial subcommand (f249): the code removal that the
    0.22.0 "Trial licenses" note forward-referenced. The subcommand, its
    dispatch wiring, and the TRIAL_DAYS constant are gone, and no upsell,
    startup banner, or accent license status line references trials anymore.
    Evaluation remains the free build/dev-serve tier (Policy A2) or a
    low-commitment monthly license. Previously issued kind: "trial" keys
    still validate and expire under the time-constrained (monthly/rental)
    rules -- there is no retroactive invalidation -- so a legacy trial key now
    renders as Monthly (rental).

Fixed

  • Expired legacy trial key mislabelled at serve --production startup
    (f249)
    : the expired-license nudge now branches on the owned-vs-rental
    lifecycle rather than the raw cadence claim, so a legacy trial key
    (which carries no cadence) is correctly treated as time-constrained -- it
    is reported as running as Core instead of falsely claiming perpetual
    ownership, and the spurious "Trial license active" banner is gone.
  • Developer-profile only, no released-binary impact: the plugin-runtime
    fuel-cap test no longer flakes under host CPU load (b096), and ad-hoc
    single-file serving under the edition-core compile profile (media
    compiled out -- never a released build) no longer 404s sibling static
    assets (b100). Every released binary compiles media in and already
    served these correctly.

Verifying your download

curl -fsSLO https://raw.githubusercontent.com/AccentCMS/accent/main/release-signing-key.asc
gpg --import release-signing-key.asc
gpg --verify checksums-v0.22.1.txt.asc checksums-v0.22.1.txt
sha256sum -c --ignore-missing checksums-v0.22.1.txt

Accent CMS v0.22.0

Choose a tag to compare

@zoosky zoosky released this 12 Jul 16:29

The launch release: Accent CMS becomes publicly downloadable. One
license-unlocked binary per platform, published with mandatory signing to
github.com/AccentCMS/accent, plus
the first release of the built-in content agent.

Added

  • Public single-binary distribution (f247): releases are now published
    to the public download repository AccentCMS/accent -- six platform
    archives (accent-v<version>-<target>), a SHA-256 checksums file, and a
    mandatory GPG signature (checksums-v<version>.txt.asc; the release
    signing key is published as release-signing-key.asc). Install scripts
    (install.sh / install.ps1) download, checksum-verify, and (with gpg
    present) signature-verify automatically; every release additionally
    receives a publication attestation in the Sigstore transparency log.
    There are no per-edition artifacts: every download contains the full
    feature set and the license key sets the runtime tier.
  • Content agent (f242, free in every edition): accent agent runs a
    budgeted, human-in-the-loop LLM session over the site's content with
    explicit provider/endpoint/model arguments and stdin approval for
    writes.
  • Agent admin chat (f244, f246): the admin UI gains a chat panel
    driving the same agent over /_admin/agent/* SSE with approval and
    steering; flipping agent.enabled changes nothing but the agent routes
    and panel markup.
  • Agent audit stamping (f245): agent sessions stamp an audit hash that
    cross-references the session log with git history.
  • Public plugin registry: github.com/AccentCMS/plugin-registry is
    live (empty for now); default-config accent plugin install resolves it
    and reports missing plugins cleanly (b099).
  • Relative markdown links now just work (b092): intra-site links written
    the portable, GitHub-compatible way -- [E001](e001-example.md),
    [up](../guide/setup.md) -- are rewritten at render time to the target
    page's clean URL, resolved against the linking page's source file exactly
    as GitHub and IDE previews resolve them. Applies to accent serve and
    accent build alike; unresolvable destinations are left untouched, and
    accent validate now flags them (new BrokenRelativeLink warning) instead
    of letting them ship as silent 404s. Absolute .md links to existing pages
    are rewritten too (skipping the redirect hop) and are no longer
    false-positived by accent validate.

Changed

  • Version output drops the compile-time edition tag (f247): accent --version now prints <version> (<hash>) [license: <tier>] and the page
    footer's accent.version_string prints <version> (<hash>). Under
    single-binary distribution every release binary compiles the same feature
    superset, so the old [edition: ...] tag would have read pro on every
    installation regardless of license. The admin Settings "Edition" row now
    shows the runtime license tier (Core (free) / Core+ / Standard / Pro).
  • Feature-invariant config schema (f234): the config.yaml schema is now
    identical in every build of Accent CMS. Config sections for subsystems that
    are not compiled into a binary (for example cdn: or mcp: on a Standard
    binary) are now parsed, type-checked, and retained instead of being silently
    ignored, and a startup warning names each such section so the omission is
    visible. As a consequence, a malformed section for a compiled-out
    subsystem now fails config load with a parse error (previously it was
    skipped as an unknown key). Well-formed configs are unaffected.
  • Canonical URLs without trailing slashes (b092): /section/ now 301s to
    /section in accent serve and accent serve-static (the redirect fires
    only for URLs that actually serve; unknown paths stay single-request 404s),
    and sitemap.xml emits the same canonical no-slash form as every other URL
    surface instead of appending a trailing slash.
  • Shared content kernel (f231): the content-critical state (index,
    cache, config) moved into a ContentKernel shared by the server and the
    MCP command, unifying the two content indexes.

Removed

  • Trial licenses: the 10-day per-edition trial is withdrawn. Evaluation
    is the free build/dev tier (no key, no time limit) plus a low-commitment
    monthly license for production. Documentation no longer offers trials;
    removal of the accent license trial command is tracked as f249.

Fixed

  • Static builds of versioning roots (b098): accent build rendered a
    versioning root's shell page (for example /docs) as a dead-end page,
    while accent serve 302s it to the default version; the build now emits
    the equivalent redirect stub.
  • accent validate file-serving-route false positives (b094): absolute
    links under /media/, /content-media/, /theme/assets/,
    /.well-known/, and /assets/plugins/ are no longer reported as broken
    pages.
  • Agent hangs (b090, b091): accent agent no longer hangs on exit when
    stdin never EOFs, and an approval pause can no longer outlive the session
    budget when the requesting client disconnects.
  • Serve-spawn test flakes on macOS (b095) and the 500-line rule breach
    that turned CI red for unrelated PRs (b097).

Security

  • CDN license gate now covers config reload and live requests (f247):
    the Pro-only CDN integration was license-checked only at serve startup, so
    a SIGHUP or POST /_admin/reload with cdn.enabled: true could activate
    asset rewriting, outbound cache purges, and the proxied-font routes
    without a Pro key. Reloads now re-gate cdn.enabled (mirroring the admin
    UI re-gate), and the /_fonts/* and purge-webhook handlers re-check it
    per request. Groundwork for single-binary distribution, where MCP and CDN
    are compiled into every release binary and the license key alone unlocks
    them.
  • Release supply chain: GPG signing of the release checksums is now
    mandatory (publishing fails without a verified signature), third-party
    deploy tooling was removed from the release path, and every published
    release is attested at publication time.
  • Bumped crossbeam-epoch 0.9.18 -> 0.9.20 (RUSTSEC-2026-0204: invalid
    pointer dereference in the fmt::Pointer impl for Atomic/Shared).
    Transitive dependency; lockfile-only patch bump.

Verifying your download

curl -fsSLO https://raw.githubusercontent.com/AccentCMS/accent/main/release-signing-key.asc
gpg --import release-signing-key.asc
gpg --verify checksums-v0.22.0.txt.asc checksums-v0.22.0.txt
sha256sum -c --ignore-missing checksums-v0.22.0.txt

Accent CMS v0.22.0-rc.1

Pre-release

Choose a tag to compare

@zoosky zoosky released this 12 Jul 15:15

Pre-release for testing. See CHANGELOG.md on the upcoming stable release.

Verifying your download

curl -fsSLO https://raw.githubusercontent.com/AccentCMS/accent/main/release-signing-key.asc
gpg --import release-signing-key.asc
gpg --verify checksums-v0.22.0-rc.1.txt.asc checksums-v0.22.0-rc.1.txt
sha256sum -c --ignore-missing checksums-v0.22.0-rc.1.txt