Skip to content

Releases: rotecodefraktion/f451

f451 1.2.0 — Theming

Choose a tag to compare

@rotecodefraktion rotecodefraktion released this 03 Oct 06:40
77b8a7e

No breaking changes. Without F451_INSTANCE_CONFIG and without theme files,
the appearance is unchanged.

Added

  • Themes per instance and space — _meta/theme.yaml in the instance repo
    (new env F451_INSTANCE_CONFIG) and in each space repo. Token values are
    resolved per token and per mode, validated against a closed grammar and
    delivered inline in the page head. Rights, history and review come from Git.
  • Personal theme — "My settings" stored with the account (migration
    0013, table user_settings), applied on top of instance and space in every
    space. Download and upload as YAML in the _meta/theme.yaml format;
    adjustments from the old browser-only preview can be taken over once.
  • Templates — _meta/themes/<slug>.yaml per instance and space,
    selected with use, and five built-in ones: fokus, klar-warm,
    system-raster, werkbank, rotecodefraktion.
  • Corridors — --measure, --measure-wide, grid widths and
    --control-h are settable within fixed ranges; breakpoints stay fixed.
  • Brand — name, logo and favicon per instance, name and logo per space
    (SVG only, 256 KB).
  • Contrast thresholds — per role, set instance-wide in
    _meta/contrast.yaml (1.5–7.0) against a fixed AA reference. Below the
    threshold blocks saving an instance or space theme; personal themes only
    get warnings.
  • Appearance settings page — /einstellungen/erscheinungsbild with the
    scopes My settings, Instance and each writable space, origin marks,
    template picker, contrast feedback and a phone layout.
  • API — /api/theme, /api/spaces/:space/theme, /api/me/theme,
    /api/theme/resolved, /api/theme/scopes, /api/theme/editor,
    /api/theme/contrast, the template library routes and the brand routes.

f451 1.1.1 — Versions start at 0.1.0

Choose a tag to compare

@rotecodefraktion rotecodefraktion released this 02 Oct 20:43
3da7905

No breaking changes. implicitVersion and implicit are new optional API fields.

Fixed

  • Versions in a versioned space: 1.0.0 is a release the reviewer chooses, not
    automatic. A new page's first release offers 0.1.0 (default) or 1.0.0; until
    now it always became 1.0.0. A page that already existed when versioning was
    turned on counts as 0.1.0, its first release offers 0.1.1, 0.2.0 or 1.0.0,
    and its original state appears in the version list as the initial version.
    Drafts have no version; nothing is written to Git until a release.
  • Review page: section titles use one font and style, and the version box's
    title sits inside the box instead of on its border.

f451 1.1.0 — Classifications and release archive

Choose a tag to compare

@rotecodefraktion rotecodefraktion released this 01 Oct 20:54
684ae12

No breaking changes. Spaces without a classification: block behave as before.

Added

  • Security classifications — four classes per page (public, internal,
    confidential, strictly confidential), shown as a chip and, for strictly
    confidential pages, a banner. Each space sets a default and a maximum in
    _meta/schema.yaml; the editor select is limited to the space maximum.
    Search hides strictly confidential pages and drops the snippets of
    confidential ones; the graph hides strictly confidential neighbours. API
    tokens carry a classification limit (default: internal). Existing tokens get
    internal by migration, which only matters in spaces that turn classifications
    on.
  • Release archive — "Freeze as release" in the review and in release_page
    creates an immutable copy of the page with its attachments under
    <page>/_releases/<version>/. Releases open in a read-only view with
    metadata, are marked in the version list, and the page header links to the
    newest one. AI agents read a release with read_page(version) via MCP.
    Requires a versioned space.

Fixed

  • Version and release entries in the page header now look like links.

f451 1.0.0 — Documents without handcuffs.

Choose a tag to compare

@rotecodefraktion rotecodefraktion released this 30 Sep 07:35
00b74b4

First release. f451 is a wiki for documentation that lives in Git:
every space is a repository on Forgejo or GitHub, every page a Markdown file,
every change a draft, a review and a release.

Features

  • Git as the source of truth — spaces are repositories, pages Markdown files
    with front matter; the database is only an index and can be rebuilt from Git.
  • Reading — page tree, full-text search, table of contents, broken-link
    report, knowledge graph; light and dark mode; German and English interface;
    phone layout.
  • Writing — WYSIWYG and raw Markdown editor with autosave and local buffer,
    visible conflicts instead of silent overwrites, templates, metadata schema per
    space, draw.io and Excalidraw diagrams editable inside the page, YouTube.
  • Review instead of direct writes — draft (branch) → review (pull request)
    → release (merge), for people and AI agents alike; visual diff; optional page
    versioning with change notes.
  • Permissions from the Git provider — no role system of its own; writes use
    the author's own Git account.
  • Sign-in — any OpenID Connect provider (Microsoft Entra ID, Forgejo,
    Keycloak, …) with a configurable button label, one-step sign-in and linking
    with Forgejo, GitHub sign-in; e-mail fallback for Entra ID.
  • AI agents — MCP service with personal API tokens: read, search, write
    drafts, generate diagrams, request reviews.
  • Look — design tokens, operator stylesheet (F451_CUSTOM_STYLESHEET),
    self-hosted typefaces, the f451 mark and favicon.
  • Operations — Docker Compose stacks for Forgejo and the app, configurable
    ports and cookie prefix for several instances on one host, reindex and drift
    reconciliation, graceful API shutdown, a reproducible public demo
    (deploy/demo/) with nightly reset and automatic deploys.
  • Container images — ghcr.io/rotecodefraktion/f451-web, -api, -mcp,
    built on every release tag.

Fixed since the first public snapshot

  • A page id used in a second space no longer moves the page between spaces;
    the conflict is reported by the reindex (#7).
  • Callout titles and the YouTube label follow the interface language (#9).
  • No review or release for a draft without changes (#11).
  • Discarding a draft that no longer exists leaves the editor instead of asking
    to retry (#22).
  • Requests are no longer lost while containers are replaced; no orphan draft
    branches after an interrupted page creation.

License

f451 License 1.1 — PolyForm Shield 1.0.0 with additional conditions: free to
use, change and share, also commercially; a separate license is needed only to
sell f451 or offer it as a paid hosted service. See LICENSE.md.

Try it: https://f451.rotecodefraktion.de (accounts on the sign-in page)

Images: ghcr.io/rotecodefraktion/f451-web:1.0.0, -api:1.0.0, -mcp:1.0.0