• v0.6.23
    docs / deploy (push) Successful in 3s
    Test / test (push) Successful in 2m11s
    Publish release / publish (push) Successful in 1m54s
    Stable

    gitea-actions released this 2026-10-07 09:25:08 +00:00 | 0 commits to main since this release

    • A configuration profile's per-payload PayloadVersion is an integer, as the plist key is typed; it was a string, which iOS may refuse.
    Downloads
  • v0.6.22
    Publish release / publish (push) Successful in 1m52s
    docs / deploy (push) Successful in 3s
    Test / test (push) Successful in 2m9s
    Stable

    gitea-actions released this 2026-10-07 09:18:46 +00:00 | 1 commits to main since this release

    • /profile.mobileconfig renders an Apple configuration profile from the mail server's own PACC document (profile.pacc in site.yaml), so iOS can be set up in one install instead of probing for ports it cannot reach. Mail, CalDAV and CardDAV in one profile; every host, port and path from PACC, never written down twice; no address, username or password in the document, so one profile serves everyone and iOS asks at install; identifiers derived from the site, so reinstalling replaces the accounts rather than duplicating them (docs: content-reference, "A configuration profile").
    Downloads
  • v0.6.21
    docs / deploy (push) Successful in 2s
    Test / test (push) Successful in 2m3s
    Publish release / publish (push) Successful in 1m51s
    Stable

    gitea-actions released this 2026-10-07 08:30:13 +00:00 | 3 commits to main since this release

    • A content repo's .well-known/ is served at the site root (/.well-known/security.txt, /.well-known/assetlinks.json, /.well-known/matrix/server), and a miss there is a 404 instead of the app shell answering 200 with an HTML page. RFC 8615 reserves the prefix and a question's id cannot begin with a dot, so nothing a repo ships can shadow a page. An extensionless file under it is typed as JSON, by the convention those files follow; .txt, .xml, .webmanifest and .mobileconfig are typed too, the last so an Apple configuration profile offers to install rather than download.
    Downloads
  • v0.6.20
    docs / deploy (push) Successful in 2s
    Test / test (push) Successful in 2m11s
    Publish release / publish (push) Successful in 1m55s
    Stable

    gitea-actions released this 2026-10-05 10:56:30 +00:00 | 4 commits to main since this release

    • A releases card lets a platform's file carry an architecture: a Mac visitor is offered the macos-arm64 file, not sent to TestFlight past it.
    Downloads
  • v0.6.19
    docs / deploy (push) Successful in 3s
    Publish release / publish (push) Successful in 2m50s
    Test / test (push) Successful in 2m10s
    Stable

    gitea-actions released this 2026-10-05 10:48:42 +00:00 | 6 commits to main since this release

    • A kind: url resource whose JSON is a releases manifest (latest, versions with per-platform assets, channels such as a package repo or TestFlight) renders as a download card: the file for the visitor's own platform first, decided in the browser, the rest and the channels folded. Written for redoal's public releases at dl.redoal.com (docs: content-reference, "A releases manifest").
    Downloads
  • v0.6.18
    docs / deploy (push) Successful in 2s
    Test / test (push) Successful in 2m0s
    Publish release / publish (push) Successful in 1m50s
    Stable

    gitea-actions released this 2026-10-03 08:48:22 +00:00 | 9 commits to main since this release

    • iris check --findings <out.jsonl> writes every finding as JSON: a stable id (scope, need, code and subject, nothing of the wording), level, code, scope, need, subject, message and fix. Every message that knows its fix now says it after "fix:". The codes are listed in docs/lint.md.
    • portal generate follows its findings through: each structure round is logged as fixed, still open, new and reopened; a fix round is shown the open findings with their fixes and only the files they name; a change that reopens a closed finding is undone; and the phase stops when a round closes nothing, writing what is left to run.log. A hesitant visitor no longer triggers a wording rewrite by itself, only a misroute does. A lint without --findings is still driven the old way.
    Downloads
  • v0.6.17
    docs / deploy (push) Successful in 2s
    Test / test (push) Successful in 2m12s
    Publish release / publish (push) Successful in 1m55s
    Stable

    gitea-actions released this 2026-10-02 09:26:13 +00:00 | 12 commits to main since this release

    • A desk shows every record still moving and only the three most recently finished (a final state: no move out of it), with "Show older" for three more at a time. A desk that has run for a year is still about the work in hand.
    • Mail variables are one set for every kind of mail (docs: Mail). Every mail has {site} and {site_name}; a state mail also has {link}, {self_link} and {desk_link}: the reader's own page for the record (a self-service page with ?chain=&email=, when the record's state allows a move there), the desk that moves it, and {link} choosing between them by who the mail is to. {link} in a state mail used to render as nothing.
    • The lint follows every state of every bucket a need lands in: a state no desk, link or clock reaches fails; a state a record can reach and never leave fails, after "done" too; a declared move nobody offers warns; a desk gated to one group on the page and another on its list warns; working stages must follow each other in the business's order; a mail from an unreachable state warns, and one naming a field no form collects fails. Clocks (after:) count as moves, and a visitor's own link only from the states it names. Each finding ends in the fix: the { from, to, label } and the desk page it goes on, or the group that already has the button. A schema error no longer hides the needs findings.
    Downloads
  • v0.6.16
    Test / test (push) Successful in 1m8s
    Publish release / publish (push) Successful in 1m56s
    Stable

    gitea-actions released this 2026-10-01 19:46:45 +00:00 | 17 commits to main since this release

    • The lint refuses an alternative that has a form to send (fields to fill in, an invite, or a bucket to record into) and no action. The button is only drawn for an alternative with an action, so such a form could be filled in and never sent, which is what happened to uhhm.no's first invite form. An alternative that moves its own record (self_transition) draws its own button and is left alone.
    • portal iris is the lint's name, after the iris that keeps bad content out of the portal. portal lint is the same command and keeps working.
    Downloads
  • v0.6.15
    Test / test (push) Successful in 1m14s
    Publish release / publish (push) Successful in 2m5s
    Stable

    gitea-actions released this 2026-10-01 16:06:16 +00:00 | 22 commits to main since this release

    • An invite may carry its own mail: invite: { group, mail: { subject, body } }. Every field of the form is a placeholder besides {name}, {link}, {expires} and the rest, and a date and time (type: datetime-local) is written out in words ("tirsdag 6. oktober kl. 15:00"). The words and the form are kept with the invite, so sending it again sends the same mail. This is for a desk that invites someone to a conversation at an hour, not into a group for good.
    Downloads
  • v0.6.14
    Test / test (push) Successful in 1m11s
    Publish release / publish (push) Successful in 1m57s
    Stable

    gitea-actions released this 2026-10-01 15:47:52 +00:00 | 27 commits to main since this release

    • Less room above the wordmark: 1.75rem, 1.25rem on a narrow screen (it was 4rem). The space was kept for who is here, which now sits on the wordmark's own line, and on a tall, narrow screen it read as dead space.
    Downloads