-
v0.6.22
Stablereleased this
2026-10-07 09:18:46 +00:00 | 1 commits to main since this release/profile.mobileconfigrenders an Apple configuration profile from the mail server's own PACC document (profile.paccinsite.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
Stablereleased 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,.webmanifestand.mobileconfigare typed too, the last so an Apple configuration profile offers to install rather than download.
Downloads
- A content repo's
-
v0.6.19
Stablereleased this
2026-10-05 10:48:42 +00:00 | 6 commits to main since this release- A
kind: urlresource whose JSON is a releases manifest (latest,versionswith per-platformassets,channelssuch 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
- A
-
v0.6.18
Stablereleased this
2026-10-03 08:48:22 +00:00 | 9 commits to main since this releaseiris check --findings <out.jsonl>writes every finding as JSON: a stableid(scope, need, code and subject, nothing of the wording),level,code,scope,need,subject,messageandfix. Every message that knows its fix now says it after "fix:". The codes are listed in docs/lint.md.portal generatefollows 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--findingsis still driven the old way.
Downloads
-
v0.6.17
Stablereleased 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
Stablereleased 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 anaction, 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 irisis the lint's name, after the iris that keeps bad content out of the portal.portal lintis the same command and keeps working.
Downloads
- 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
-
v0.6.15
Stablereleased 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
- An invite may carry its own mail:
-
v0.6.14
Stablereleased 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