From 88afa215f83413e36944419017fed1c1f4c1a0c1 Mon Sep 17 00:00:00 2001
From: nicolas de Barquin
Date: Tue, 3 Nov 2026 11:02:04 +0100
Subject: [PATCH] 7.3.0-1: stock CSS 7.3.0; new pods get Type Indexes
- CSS 7.3.0 (Node 24): consent and account templates merged (WebID repair
links), baseline refreshed.
- New pods start with a public Type Index (readable by anyone), a private one
and a preferences file naming it; the profile links the public index and the
preferences file. Profile card template is now an override, in the baseline.
- Smoke: both layouts green; Type Index checked on fresh pods (public index
200 anonymously, prefs/private index/settings 401).
Closes #30
Co-Authored-By: Claude Opus 5.5
---
CHANGELOG.md | 25 ++++++++++++++++++
Dockerfile | 4 +--
overlay/main.css | 6 +++++
.../identity/account/resource.html.ejs | 9 ++++++-
.../templates/identity/oidc/consent.html.ejs | 17 +++++++++++-
.../pod/acp/settings/publicTypeIndex.ttl.acr | 20 ++++++++++++++
.../templates/pod/base/profile/card$.ttl.hbs | 26 +++++++++++++++++++
.../templates/pod/base/settings/prefs.ttl.hbs | 10 +++++++
.../base/settings/privateTypeIndex.ttl.hbs | 8 ++++++
.../pod/base/settings/publicTypeIndex.ttl.hbs | 9 +++++++
.../wac/settings/publicTypeIndex.ttl.acl.hbs | 17 ++++++++++++
pod-name-guard/package-lock.json | 18 ++++++-------
pod-name-guard/package.json | 2 +-
upstream-baseline.sha256 | 7 ++---
14 files changed, 161 insertions(+), 17 deletions(-)
create mode 100644 overlay/templates/pod/acp/settings/publicTypeIndex.ttl.acr
create mode 100644 overlay/templates/pod/base/profile/card$.ttl.hbs
create mode 100644 overlay/templates/pod/base/settings/prefs.ttl.hbs
create mode 100644 overlay/templates/pod/base/settings/privateTypeIndex.ttl.hbs
create mode 100644 overlay/templates/pod/base/settings/publicTypeIndex.ttl.hbs
create mode 100644 overlay/templates/pod/wac/settings/publicTypeIndex.ttl.acl.hbs
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aa97cc9..0d424ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,31 @@ Versions are `-`: a new stock release starts at `-1`, a
new overlay on the same stock adds one. A tag `v` publishes both
images (`.github/workflows/build.yml`).
+## 7.3.0-1 — 2026-11-03
+
+Stock CSS 7.3.0 (#30). An instance updates the image; nothing to change in
+`.env` but the version. Pods made before keep what they have: the new pod
+files below come with pods made from this image on.
+
+- **CSS 7.3.0.** Runs on Node 24 (the guard is built and tested in the stock
+ image, so it moved with it). Upstream changes that matter to instances:
+ pod quota now works in subdomain mode (was silently unlimited), write locks
+ hold while a request body is still arriving, and **a WebID's profile can be
+ repaired** from the account (`recoverWebId`): it is regenerated from the pod
+ templates, the old one backed up beside it.
+- **Merged into the overlay:** the consent page's "repair it first" line and the
+ account page's "Repair a WebID in one of your pods" link (stock ids kept,
+ hidden when the server can't repair), set apart from the main choice.
+- **New pods are findable by type.** A new pod starts with a public Type Index
+ (`settings/publicTypeIndex.ttl`, readable by anyone), a private one
+ (`settings/privateTypeIndex.ttl`) and a preferences file (`settings/prefs.ttl`,
+ naming the private index), all private but the public index. The profile
+ (`pod/base/profile/card$.ttl.hbs`, now an override, in the baseline) links the
+ public index and the preferences file, so apps never have to write the
+ profile to add them; a profile repaired by 7.3's recovery keeps the links.
+ Both layouts, WAC and ACP. Asked by Maps of Making home (mom-home#14,
+ decision 2026-11-03).
+
## 7.2.0-13 — 2026-11-02
An instance updates the image; nothing to change in `.env` but the version.
diff --git a/Dockerfile b/Dockerfile
index bc27f82..789a7e4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,10 +5,10 @@
#
# Nothing in CSS is patched. The image only adds files where stock CSS already
# looks for them (templates/), one config, and one component (PodNameGuard).
-ARG CSS_VERSION=7.2.0
+ARG CSS_VERSION=7.3.0
# PodNameGuard, built and tested in the stock image it will run in, so on the
-# same Node: 18 for CSS 7.x, 22 for 8.0. Until 7.2.0-5 this stage was a pinned
+# same Node: 18 for CSS 7.0-7.2, 24 from 7.3.0, 22 for 8.0. Until 7.2.0-5 this stage was a pinned
# node:18-slim, which would have kept testing on 18 after the move to 8.0 (and
# 18 is past end of life). The stage only builds; nothing of it but the built
# component reaches the final image.
diff --git a/overlay/main.css b/overlay/main.css
index 5db5af1..80e8109 100644
--- a/overlay/main.css
+++ b/overlay/main.css
@@ -590,3 +590,9 @@ ol.breadcrumbs > li:only-child { display: none; }
@media (prefers-reduced-motion: reduce) {
.pending-line { animation: none; left: 0; width: 100%; opacity: 0.5; }
}
+
+/* CSS 7.3.0's WebID recovery links (consent, account). On consent it is an
+ aside to the choice above, not part of it: set apart and quieter. On the
+ account page it sits beside "Link a WebID": a gap, never run together. */
+#recoverWebId:is(p) { margin-top: 24px; font-size: 0.875rem; color: var(--text-secondary); }
+#linkWebId + #recoverWebId { margin-left: 1.5em; }
diff --git a/overlay/templates/identity/account/resource.html.ejs b/overlay/templates/identity/account/resource.html.ejs
index e5d7188..3745f2f 100644
--- a/overlay/templates/identity/account/resource.html.ejs
+++ b/overlay/templates/identity/account/resource.html.ejs
@@ -1,4 +1,4 @@
-<%# Override of CSS 7.2.0 identity/account/resource.html.ejs (upstream-baseline.sha256).
+<%# Override of CSS 7.3.0 identity/account/resource.html.ejs (upstream-baseline.sha256).
Kept from stock: every id and the whole script, but for two labels it sets
("Change" for "(update)", "Remove" for util.js's "(delete)").
Changed: copy, an intro line, and the order — pods and WebIDs first, each
@@ -20,6 +20,7 @@
@@ -79,6 +80,12 @@
setVisibility('webIds', false);
} else {
updateElement('linkWebId', controls.html.account.linkWebId, { href: true });
+ // CSS 7.3.0 (stock, kept): only shown when the server can recover a WebID from its pods.
+ if (controls.html.account.recoverWebId) {
+ updateElement('recoverWebId', controls.html.account.recoverWebId, { href: true });
+ } else {
+ setVisibility('recoverWebId', false);
+ }
showAccountInfo(elements.webIdEntries, webIdLinks, false, true,
'Are you sure you want to delete the registration of this WebID? ' +
'If you do so you will be unable to identify as this WebID using this server, which can potentially cause you to lose access to data restricted to this WebID.',
diff --git a/overlay/templates/identity/oidc/consent.html.ejs b/overlay/templates/identity/oidc/consent.html.ejs
index 25e1b93..e070053 100644
--- a/overlay/templates/identity/oidc/consent.html.ejs
+++ b/overlay/templates/identity/oidc/consent.html.ejs
@@ -1,4 +1,4 @@
-<%# Override of CSS 7.2.0 identity/oidc/consent.html.ejs (upstream-baseline.sha256).
+<%# Override of CSS 7.3.0 identity/oidc/consent.html.ejs (upstream-baseline.sha256).
Kept from stock: every id, name and the consent flow in consent().
Changed: copy; focus starts on the heading (#authorize is disabled at load and
cannot take autofocus); the WebID list is sorted, labelled for reading and
@@ -37,6 +37,11 @@
+
+
+ If an app can't read or use a WebID that lives in one of your pods, stop here:
+ repair it first from your account.
+