Bendik Lynghaug and Claude Opus 5
5b381e4f60
Type a payload's PayloadVersion as an integer
...
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 2m11s
Publish release / publish (push) Successful in 1m54s
The key is typed in the plist, and each payload carried a string where
the top level carried an integer - which iOS may refuse outright. A test
now holds all three to the same type.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
2026-10-07 11:25:08 +02:00
Bendik Lynghaug and Claude Opus 5
44c7ee6870
Render an Apple configuration profile from the server's PACC document
...
Publish release / publish (push) Successful in 1m52s
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 2m9s
iOS is the one client none of the mail autoconfiguration reaches: Apple
Mail reads neither Mozilla autoconfig nor Autodiscover for IMAP, so
adding an account means the device probing for ports - and a probe that
meets a filtered port waits out a TCP timeout and reports the account as
unverifiable, which the person reads as a wrong password.
A profile states the hosts and the ports instead, and carries mail,
calendars and contacts in one install. It invents none of them: site.yaml
names a PACC document - the standard defined to be fetched from the mail
domain itself - and every host, port and collection path comes from
there, so the server is described in one place and the profile follows it.
The document holds no address, username or password. iOS asks for those
at install, which means one profile serves everyone with an account and
it can be fetched by anyone: it says no more than PACC already says in
public. Identifiers are derived from the site and the payload rather than
drawn at random, because iOS replaces a profile whose ids it knows and
stacks a duplicate when they differ.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
2026-10-07 11:18:46 +02:00
Bendik Lynghaug and Claude Opus 5
43a2f3a069
Document files at the site root
...
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 2m4s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
2026-10-07 10:31:21 +02:00
Bendik Lynghaug and Claude Opus 5
c9faaeb4a6
Serve a content repo's .well-known/ at the site root
...
docs / deploy (push) Successful in 2s
Test / test (push) Successful in 2m3s
Publish release / publish (push) Successful in 1m51s
Everything a site has to publish for another program to find it lives
under /.well-known/, and portal had no way to put a file there: the
catch-all answered those paths 200 with the app shell, so a client
probing for security.txt or matrix/server got HTML where it expected a
document, and could not tell a missing file from a present one.
The prefix is the one place this is safe to overlay. RFC 8615 reserves
it, and a question's id comes from a file name under questions/, which
cannot begin with a dot - so no file a repo ships can shadow a page. The
path still goes through is_safe_site_path, so it cannot climb out of the
repo either, and a miss is a real 404.
Types: an extensionless file under the prefix is JSON, which is what
matrix/server and nodeinfo are; .mobileconfig is the Apple profile type,
without which iOS downloads a profile instead of offering to install it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
2026-10-07 10:30:13 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
1a2c064d3a
Release 0.6.20
...
docs / deploy (push) Successful in 2s
Test / test (push) Successful in 2m11s
Publish release / publish (push) Successful in 1m55s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-05 12:56:30 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
fe7a868b18
A platform's file may name its architecture
...
A Mac is offered the macos-arm64 file rather than sent past it to
TestFlight.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-05 12:56:19 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
aee5048b01
Release 0.6.19
...
docs / deploy (push) Successful in 3s
Publish release / publish (push) Successful in 2m50s
Test / test (push) Successful in 2m10s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-05 12:48:42 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
268d545843
A releases manifest renders as a download card, the device's file first
...
A kind: url resource whose JSON is a releases manifest - latest,
versions newest first with per-platform assets, channels such as a
package repo or TestFlight - is one card: the newest version, the file
for the visitor's own platform (read from the browser on hydration;
the server renders every file), the Linux package repo lines beside a
Linux file, TestFlight for iPhones and Macs, and the rest folded under
"All downloads". Decided by shape, as every resource is; written for
redoal's public releases at dl.redoal.com.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-05 12:48:31 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5
22d086f9e1
A resource can show only its newest few
...
docs / deploy (push) Successful in 2s
Test / test (push) Successful in 2m0s
`limit: n` on a resource spec, applied after `jq`.
The releases card is what asked for it: a page that grows by one card
per release gets longer forever, and the cut a visitor should run is the
newest one — the rest are history, not an invitation. redoal's card had
every release on it.
After `jq` rather than before, for two reasons: it caps what the page
will actually render whatever the filter did, and content that reorders
with the filter can then take the top of its own ordering rather than
the top of the source's. A source yielding a single record has no length
and passes through untouched — turning one record into an empty list
would be worse than ignoring a limit that cannot apply. `limit: 0` on a
list does mean nothing, and the `empty` line speaks instead, which is a
coherent thing for content to ask for.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01ByshXuDEzH8hXh5qp4VgGk
2026-10-04 22:51:12 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
48ae5e07c2
Release 0.6.18
...
docs / deploy (push) Successful in 2s
Test / test (push) Successful in 2m0s
Publish release / publish (push) Successful in 1m50s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:48:22 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
b619926a11
generate follows its findings through, and stops when it stalls
...
Each structure round is logged as fixed, still open, new and reopened;
a fix round sees the open findings with their fixes and only the files
they name; a change that reopens a closed finding is undone; a round
that closes nothing ends the phase with what is left in run.log. A
hesitant visitor alone no longer triggers a wording rewrite.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:48:09 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
706c8108df
iris check --findings: every finding as JSON with a stable id
...
The id hashes scope, need, code and subject, nothing of the wording, so
the same gap keeps its id across runs. Every message that knows its fix
says it after "fix:". Codes listed in docs/lint.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 10:48:09 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
2feeea0810
Release 0.6.17
...
docs / deploy (push) Successful in 2s
Test / test (push) Successful in 2m12s
Publish release / publish (push) Successful in 1m55s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MznPTC31w5mSUK4XMehcpi
2026-10-02 11:26:13 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
6b91258ebe
One set of mail variables for every mail, and {link} in state mails
...
{site} and {site_name} everywhere; a state mail adds {self_link} (the
submitter's own page, when their record's state allows a move there),
{desk_link} and {link}, which picks by who the mail is to. gullberg's
{link} mails went out blank until now. Documented in docs/mail.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MznPTC31w5mSUK4XMehcpi
2026-10-02 11:25:49 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
ae119af987
A desk shows the three newest finished records, and older on request
...
Every record still moving stays; of those in a final state only the
three most recently decided, plus one so the page knows to offer
"Show older", three more at a time.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MznPTC31w5mSUK4XMehcpi
2026-10-02 11:25:49 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
92dd9bfc79
The lint walks every state of every bucket a need lands in
...
Clocks count as moves and a visitor's link only from its own states.
Per bucket: a state nothing reaches fails, a state a record can reach
and never leave fails (after done too), a declared move nobody offers
warns, a desk gated twice warns, and a mail from an unreachable state
or naming a field no form collects is caught. Working stages must
follow each other. Every finding ends in its fix, and a schema error no
longer hides the needs findings.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MznPTC31w5mSUK4XMehcpi
2026-10-02 11:25:49 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
2cc74e3354
CI builds and lints every plan with this portal
...
Test / test (push) Successful in 2m35s
The check portal-trainer's CI ran with the standalone trainer, which
kept failing on a builder bug fixed here long ago. Now it runs where the
trainer lives, with the same binary.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MznPTC31w5mSUK4XMehcpi
2026-10-02 09:27:44 +02:00
Bendik Aagaard Lynghaug
7b54c4c6d7
Release 0.6.16
Test / test (push) Successful in 1m8s
Publish release / publish (push) Successful in 1m56s
2026-10-01 21:46:45 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
738dbac7fe
Test fixtures: every form has the action the lint now requires
...
Test / test (pull_request) Successful in 21s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 21:46:24 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
4049809aa4
The lint refuses a form with no action, which would have no button; portal iris names the lint
...
Test / test (pull_request) Failing after 1m11s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 21:41:56 +02:00
Bendik Aagaard Lynghaug
b43ff57eab
Release 0.6.15
Test / test (push) Successful in 1m14s
Publish release / publish (push) Successful in 2m5s
2026-10-01 18:06:16 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
cc9f1c5d87
An invite may carry its own mail, with the form's fields and a spoken date and time
...
Test / test (pull_request) Successful in 1m9s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 18:06:12 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
506bb712fe
Klingenberg Bygg plan: Fredrik's two caption corrections from the live site
...
Test / test (pull_request) Successful in 1m10s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 17:57:08 +02:00
Bendik Aagaard Lynghaug
74fd2d1750
Release 0.6.14
Test / test (push) Successful in 1m11s
Publish release / publish (push) Successful in 1m57s
2026-10-01 17:47:51 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
d0ee06f48c
Less room above the wordmark, now that who is here sits on its line
...
Test / test (pull_request) Successful in 1m51s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 17:47:45 +02:00
Bendik Aagaard Lynghaug
6a9be3bef4
Release 0.6.13
Test / test (push) Successful in 1m5s
Publish release / publish (push) Successful in 1m48s
2026-10-01 11:40:32 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
78f42e6f8a
Who is here on the wordmark's line; every form carries a signed-in person's name and address
...
Test / test (pull_request) Successful in 1m6s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 11:40:27 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
9b50c9cab8
Gullberg: i Ås, ikke på Ås
...
Test / test (push) Successful in 1m4s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 11:09:08 +02:00
Bendik Aagaard Lynghaug
bf92666b3e
Merge branch 'main' into gullberg-plan
Test / test (pull_request) Successful in 1m4s
2026-10-01 10:42:35 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
b070d77acd
Gullberg: the house behind Ås kirke, rooms for everyone with students first, mails written to the reader who opens them
...
Test / test (pull_request) Successful in 1m5s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 10:41:41 +02:00
Bendik Aagaard Lynghaug
cc07cd321d
Release 0.6.12
Test / test (push) Successful in 1m5s
Publish release / publish (push) Successful in 1m44s
2026-10-01 10:41:31 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
8f24e5483c
Trainer: tell the words model who opens each mail
...
Test / test (pull_request) Successful in 1m9s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 10:41:27 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
b970c64c6a
Gullberg wordmark: sanatorium set in a little from the edges
...
Test / test (pull_request) Successful in 1m7s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 10:19:43 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
8a1fbd92ba
Gullberg wordmark: sanatorium spread to GULLBERG's width
...
Test / test (pull_request) Successful in 1m8s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 10:16:04 +02:00
Bendik Aagaard Lynghaug
1929d2f44e
Release 0.6.11
Test / test (push) Successful in 1m8s
Publish release / publish (push) Successful in 1m50s
2026-10-01 09:33:31 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
8376c68f8f
wordmark_ink: an SVG wordmark drawn in the page's own ink, following light and dark everywhere
...
Test / test (pull_request) Successful in 1m8s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 09:33:27 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
b9f69a5e7a
Gullberg wordmark as Futura outlines, cropped to the letters
...
Test / test (pull_request) Successful in 1m7s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 09:28:47 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
37624e8e2b
Gullberg: reviewed Norwegian words (nine misreadings fixed, invite mail written), tenants follow their own fault reports
...
Test / test (pull_request) Successful in 1m7s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 07:36:45 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
902dc36831
Gullberg: lighter on the bank, the co-owner offer held back, and the points the shareholder agreement must cover
...
Test / test (pull_request) Successful in 1m6s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 07:28:28 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
54efedef56
Gullberg draft: the site as the bank's running proof that the company operates; the ownership transfer step by step; a read-only bank group
...
Test / test (pull_request) Successful in 1m6s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 07:20:35 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
742be200a9
Gullberg draft: two of the four quarters are for sale; finding the co-owners comes first; the bank parts only if the company borrows
...
Test / test (pull_request) Successful in 1m6s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 07:18:25 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
2d695f990b
Gullberg draft: four equal shareholders; faults go to Klingenberg Bygg, its estimates to the board and the reports
...
Test / test (pull_request) Successful in 1m6s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 07:15:35 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
b016dfd964
Gullberg draft: the whole house in Gullberg AS, two shareholders, a bank lender; what the bank requires
...
Test / test (pull_request) Successful in 1m6s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 07:11:44 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
35e9586e77
Gullberg draft: the repayment plan all shareholders approve, and the monthly rent ledger
...
Test / test (pull_request) Successful in 1m7s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-10-01 07:07:26 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
4e211ddbff
Draft: GULLBERG sanatorium's plan, business-plan outline and wordmark; a board's published list may be public
...
Test / test (pull_request) Successful in 1m14s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 22:34:33 +02:00
Bendik Aagaard Lynghaug
c8901558b2
Release 0.6.10
Test / test (push) Successful in 1m18s
Publish release / publish (push) Successful in 2m1s
2026-09-30 21:52:28 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
02c94ae5dc
Changelog: 0.6.10
...
docs / deploy (push) Successful in 2s
Test / test (push) Successful in 1m11s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 21:52:25 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
e6c4f67db7
Who a business is gets a page of its own; inside forms ask real questions; build names untried needs
...
Test / test (pull_request) Successful in 1m12s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 21:52:23 +02:00
Bendik Aagaard Lynghaug
19b7750292
Release 0.6.9
Test / test (push) Successful in 1m8s
Publish release / publish (push) Successful in 1m54s
2026-09-30 21:38:59 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
1a1723f8bb
Changelog: 0.6.9
...
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 1m9s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 21:38:56 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
eb982ec6e6
A bio is markdown, on stricter rules than the site's own
...
Test / test (pull_request) Successful in 1m9s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 21:38:54 +02:00
Bendik Aagaard Lynghaug
c6dffc384c
Release 0.6.8
Test / test (push) Successful in 1m9s
Publish release / publish (push) Successful in 2m0s
2026-09-30 21:08:33 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
db0972974f
Changelog: 0.6.8
...
docs / deploy (push) Successful in 4s
Test / test (push) Successful in 1m17s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 21:08:30 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
db89ea6400
An upload that did not arrive says why
...
Test / test (pull_request) Successful in 1m21s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 21:08:28 +02:00
Bendik Aagaard Lynghaug
95bffc221b
Release 0.6.7
Test / test (push) Successful in 1m19s
Publish release / publish (push) Successful in 2m8s
2026-09-30 20:50:44 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
f5266cb347
Changelog: 0.6.7
...
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 1m17s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:50:42 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
0dc25b4023
A record may leave its lists some time after reaching a state: leaves_after
...
Test / test (pull_request) Successful in 1m20s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:50:28 +02:00
Bendik Aagaard Lynghaug
96c513d912
Release 0.6.6
Test / test (push) Successful in 1m16s
Publish release / publish (push) Successful in 2m7s
2026-09-30 20:39:12 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
0cb1dda202
Changelog: 0.6.6
...
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 1m16s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:39:10 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
809a6bdfe8
A card of one's own: one_per_person, prefilled, replaced on send; no double sends; refusals are shown
...
Test / test (pull_request) Successful in 1m12s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:39:01 +02:00
Bendik Aagaard Lynghaug
cae116b50c
Release 0.6.5
Test / test (push) Successful in 1m9s
Publish release / publish (push) Successful in 1m54s
2026-09-30 20:10:59 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
d8528ff1f9
Changelog: 0.6.5
...
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 1m10s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:10:56 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
9368086d81
A need may be paused: its card stays, with no form and a button that does not press
...
Test / test (pull_request) Successful in 1m12s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 20:09:14 +02:00
Bendik Aagaard Lynghaug
e2497941c8
Release 0.6.4
Test / test (push) Successful in 1m9s
Publish release / publish (push) Successful in 1m55s
2026-09-30 19:52:12 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
55fc61c514
Changelog: 0.6.4
...
docs / deploy (push) Successful in 2s
Test / test (push) Successful in 1m9s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 19:52:10 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
87d4dda0eb
Rate limit: a hundred at once, ten a second, and the page's own files are not counted
...
Test / test (pull_request) Successful in 1m15s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 19:51:48 +02:00
Bendik Aagaard Lynghaug
3604683df3
Release 0.6.3
Test / test (push) Successful in 1m8s
Publish release / publish (push) Successful in 1m55s
2026-09-30 19:33:11 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
1193894b02
Changelog: 0.6.3
...
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 1m8s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 19:33:08 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
309e30f36d
Pages move the way their addresses do; a record with a picture is a card; the trainer says who a business is
...
Test / test (pull_request) Successful in 1m13s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 19:32:49 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
a70690a736
Klingenberg Bygg's plan and words; a plan carries a slideshow; the words model is told what a follower's desk and an inside sent page are
...
Test / test (pull_request) Successful in 1m17s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:56:24 +02:00
Bendik Aagaard Lynghaug
827a75be3d
Release 0.6.2
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 1m14s
Publish release / publish (push) Successful in 2m3s
2026-09-30 17:39:57 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
4e0a56be13
Changelog: 0.6.2
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:39:55 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
c766dedc0e
A stored file on a record shows as its name and opens from the row
...
Test / test (pull_request) Successful in 1m16s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:38:32 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
a822f2175f
Trainer: followed_by - a group whose members each see their own cases; file fields
...
Test / test (pull_request) Successful in 1m14s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:36:08 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
f2b131ebbb
KANIDM_GROUP_PREFIX: plain group names in content on a shared Kanidm
...
Test / test (pull_request) Successful in 1m14s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:34:21 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
6b72ae568a
The header knows who is here; my cases; controls that scale with the text
...
Test / test (pull_request) Successful in 1m12s
A session link top right on a site with sign-in, and on a page with
pictures the wordmark as its own bar over the strip. A list may be
narrowed to the signed-in person's own records ({user.email}, from the
session), and an attachment follows the list that shows its record.
Form controls are sized in em: the date picker's icon and the file
picker's button scale and take the field's colours.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:32:41 +02:00
Bendik Aagaard Lynghaug
9a96386444
Release 0.6.1
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 1m7s
Publish release / publish (push) Successful in 1m46s
2026-09-30 17:19:36 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
5c95b6d8b3
Changelog: 0.6.1; the bare binary sorts after the tarball
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:19:34 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
c1a8433640
Slideshow: brace the closure
...
Test / test (pull_request) Successful in 1m8s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:17:55 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
cfb050d3ef
A slideshow across a page: pictures the full width of the screen, captions over them
...
Test / test (pull_request) Failing after 1m5s
slideshow on a page: max_height in svh, slides with an image (a path
in the content repo or https), a caption laid over the picture's foot,
and optionally the picture's size so its place is held before it
loads. Swiper upgrades it; before that it is a row that scrolls.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:16:50 +02:00
Bendik Aagaard Lynghaug and Claude Opus 5.5
c7e0ee146f
Trainer: documents - a text word for word, one card per section
...
Test / test (pull_request) Successful in 1m8s
Bylaws and terms are not the model's to write. documents in a plan
names a markdown file beside it; every heading with text under it is
one alternative on a page of its own, its paragraphs the card's words.
Tomter Vel's bylaws of 23.04.2018 are the first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 17:05:06 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
3bb517be0f
Docs: vel.klingenbergbygg.no runs v0.6.0
...
docs / deploy (push) Successful in 2s
Test / test (push) Failing after 8s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:40:35 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
4eb1d03583
Changelog: 0.5.11 was tagged and never published
...
docs / deploy (push) Successful in 2s
Test / test (push) Failing after 35s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:38:53 +02:00
Bendik Aagaard Lynghaug
3cb0733955
Release 0.6.0
docs / deploy (push) Successful in 3s
Publish release / publish (push) Successful in 1m53s
Test / test (push) Successful in 1m5s
2026-09-30 15:33:17 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
969c22b432
Changelog: 0.6.0
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:33:15 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
48cba5cd8e
Docs: the examples in English
...
Test / test (pull_request) Successful in 1m5s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:31:59 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
96b3746643
One binary: the lint and the trainer are commands of portal
...
Test / test (pull_request) Successful in 1m7s
portal serve runs a site; portal lint is what iris was; portal plan,
build, report and the rest are what portal-trainer was. One source at
one version, so the three never disagree about what content means.
Both histories are merged in (subtree). The release attaches the bare
binary for a content repo's CI. The trainer's plans, intakes, engines
and reference prompt come along; its runs stay in the old repo.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:29:30 +02:00
Bendik Aagaard Lynghaug
d0d1cbf23d
Bring the lint in (uhhm/iris main, history kept)
...
git-subtree-dir: vendor/lint
git-subtree-mainline: bedd306854
git-subtree-split: e3c68f9441
2026-09-30 15:23:16 +02:00
Bendik Aagaard Lynghaug
bedd306854
Bring the trainer in (uhhm/portal-trainer main, history kept)
...
git-subtree-dir: vendor/trainer
git-subtree-mainline: c7c2956e15
git-subtree-split: a2a9f4edcf
2026-09-30 15:23:15 +02:00
Bendik Aagaard Lynghaug
c7c2956e15
Release 0.5.11
docs / deploy (push) Successful in 2s
Test / test (push) Failing after 39s
Publish release / publish (push) Failing after 2m13s
2026-09-30 15:17:32 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
267f7f0787
Changelog: 0.5.11
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:17:30 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
e3c68f9441
needs.yaml may name the tones
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:17:20 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
a2a9f4edcf
Tones and storylines: every word once per tone, kept through a lift, and a report of what each brought in
...
tones in the plan lists tones of voice, one storyline each. The words
pass writes each page once per tone and folds the tones into lists
where they differ; the render emits the lists portal reads as
storylines; the lift carries them back. needs.yaml names the tones.
portal-trainer report --site reads the site's counts per storyline
and scores each on what arrived and what ended well.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:16:29 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
f395ace556
Storylines: the same site told several ways, one per visitor, counted
...
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 1m1s
Any text a person reads may be a list, one entry per storyline, every
list the same length. A visitor is given one storyline for the whole
site and reads it on every page and in every mail about their case.
Records and events carry the storyline; GET /report gives counts per
bucket, storyline and state, and nothing else.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 15:11:27 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
cc3107e502
Docs: vel.klingenbergbygg.no runs v0.5.10 with memberships
...
docs / deploy (push) Successful in 3s
Test / test (push) Failing after 25s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 14:22:11 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
ca73ef7e9f
plans: Tomter Vel keeps its people in portal (people: memberships)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 14:12:22 +02:00
Bendik Aagaard Lynghaug
cb31995299
Release 0.5.10
docs / deploy (push) Successful in 4s
Test / test (push) Failing after 45s
Publish release / publish (push) Successful in 3m35s
2026-09-30 14:10:06 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
579ad6f50d
The lint lets an invite form ask for a phone number instead of an address
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 14:09:49 +02:00
Bendik Aagaard Lynghaug
89d419ff7b
Release 0.5.9
docs / deploy (push) Successful in 3s
Test / test (push) Successful in 58s
Publish release / publish (push) Successful in 3m36s
2026-09-30 14:06:58 +02:00
Bendik Aagaard Lynghaug and Claude Fable 5.1
00571f65bd
Changelog: 0.5.9
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
2026-09-30 14:06:56 +02:00